// 字符串遍历 for...of
function strIterator() {
    for (let cp of 'foo') {
        console.log(cp); // f o o
    }
    // for...of 遍历器最大的优点是可以识别大于0xFFFF的码点，传统的for循环无法识别这样的码点。
    var text = String.fromCodePoint(0x20BB7);

    for (let i = 0; i < text.length; i++) {
        console.log(text[i]);
    }
    // " "
    // " "
    for (let i of text) {
        console.log(i);
    }
    // "𠮷"
    for (let cp in 'foo') {
        console.log(cp); // 0 1 2
    }
    // 上面代码中，字符串text只有一个字符，但是for循环会认为它包含两个字符（都不可打印），而for...of循环会正确识别出这一个字符。
}

// charAt
function ca() {
    console.log('abc'.charAt(0));
    '𠮷'.charAt(0); // "\uD842"
    // charAt方法返回的是UTF-16编码的第一个字节，实际上是无法显示的。
    // 字符串实例的at方法，可以识别Unicode编号大于0xFFFF的字符，返回正确的字符。
    'abc'.at(0);
}

// includes, startsWith, endsWith
function ise() {
    console.log('abc'.includes('ab'));
    console.log('abc'.startsWith('a'));
    console.log('abc'.endsWith('c0'));
    console.log('abc'.startsWith('b', 1)); // true
    // 这三个方法都支持第二个参数，表示开始进行搜索的位置；
}

function rep() {
    'x'.repeat(3);// "xxx"
    'hello'.repeat(2);// "hellohello"
    'na'.repeat(0);// ""
    // 如果参数是小数，则会被取整，如果是负数，则会报错；
}


// http://es6.ruanyifeng.com/#docs/string#padStart%EF%BC%8CpadEnd
// padStart | padEnd

// 模板字符串
function temp() {
    var basket = {
        count: 3,
        onSale: 2
    };
    var str = `
There are <br>${basket.count}</br> items;
`;
    console.log(str);
    // 模板字符串（template string）是增强版的字符串，用反引号（`）标识。
    // 它可以当作普通字符串使用，也可以用来定义多行字符串，或者在字符串中嵌入变量。

    // 如果在模板字符串中需要使用反引号，则前面要用反斜杠转义。
    var greeting = `\`Yo\` World!`;

    // 如果使用模板字符串表示多行字符串，所有的空格和缩进都会被保留在输出之中。

    $('#list').html(`
<ul>
  <li>first</li>
  <li>second</li>
</ul>
`);
    // 上面代码中，所有模板字符串的空格和换行，都是被保留的，比如<ul>标签前面会有一个换行。
    // 如果你不想要这个换行，可以使用trim方法消除它。
    `
    abc`.trim();

    // 模板字符串中嵌入变量，需要将变量名写在${}之中。
    // 大括号内部可以放入任意的JavaScript表达式，可以进行运算，以及引用对象属性，或者是调用外部方法。

    // 如果模板字符串中的变量没有声明，将报错。
    // 由于模板字符串的大括号内部，就是执行JavaScript代码，因此如果大括号内部是一个字符串，将会原样输出。

    // 模板字符串甚至还能嵌套。
    const tmpl = addrs => `
  <table>
  ${addrs.map(addr => `
    <tr><td>${addr.first}</td></tr>
    <tr><td>${addr.last}</td></tr>
  `).join('')}
  </table>
`;

}

console.log(parseInt('32'));
